// pages/finger/finger.js

Page({

  /**
   * 页面的初始数据
   */

  data: {
    list: [], // 存放坐标点
    length: 0,  //坐标个数
    colorList: ['#FF6600', '#0099cc', '#FFFFCC', '#339933', '#FF6666', '#333399', '#FF0033', '#33CC99'], // 颜色数组
    startTime: '', // 自动开始的计时器
    countTime: '', // 倒计时动画的计时器
    showStart: true, // 是否显示重新开始按钮false不显示，true显示
    gameState: false, // 游戏是否运行中false未运行，true运行
    select: '', // 运行时选中的值，选中那个会高亮
    resFail: '', // 那个会输的值
    speed: 1, // 运行时循环此时的初始值
    count: 4, // 控制倒计时动画图片显示
    runTime: '', // 运行时的计时器
    mask: false,  //游戏开始禁止点击遮罩层
    begin:false,  //游戏是否开始
  },

  // 进行中
  gameRun() {
    if (this.data.speed > 8 && this.data.select == this.data.resFail) {
      clearTimeout(this.data.runTime)
      // 游戏结束的方法下面会写如何实现
      this.gameEnd()
      return
    }
    let flag = this.data.select + 1;
    let temp = this.data.speed + 1;
    this.setData({ select: flag,mask:true,begin:true })
    // 当转到一圈的时候speed值加一并且把select重置为0
    if (this.data.select >= this.data.list.length) {
      this.setData({
        select: 0,
        speed: temp
      })
    }
    this.data.runTime = setTimeout(() => {
      this.gameRun()
    }, 50 * this.data.speed)
  },
  // 增加坐标
  setList(e) {
    // 记录坐标以及颜色
    console.log('touch');
    let index = this.data.list.length;
    let obj = {
      pointX: parseInt(e.changedTouches[0].pageX),
      pointY: parseInt(e.changedTouches[0].pageY),
      bgcColor: this.data.colorList[index]
    }
    let temp = this.data.list;
    temp.push(obj)
    // 将记录的添加到数组中
    this.setData({
      list: temp,
      length: this.data.list.length
    })
    // 由于后面是list数组长度大于1时会有定时器自动执行
    if (index > 1) {
      // 这里需要清除定时器防止重复
      clearTimeout(this.data.startTime)
      clearTimeout(this.data.countTime)
      this.setData({ count: 4 })
      // 自动开始的方法下面会写如何实现
      this.gameStart()
    }
  },
  // 删除坐标
  delList(e) {
    // 当游戏结束的时候就不用再删除坐标了
    if (this.data.begin) {
      return
    }
    // 实现删除坐标的
    let bigX = parseInt(e.changedTouches[0].pageX) + 40
    let smallX = parseInt(e.changedTouches[0].pageX) - 40
    let bigY = parseInt(e.changedTouches[0].pageY) + 40
    let smallY = parseInt(e.changedTouches[0].pageY) - 40
    this.data.list.map((value, index) => {
      let resX = value.pointX > smallX ? (value.pointX < bigX ? 'true' : 'false') : 'false'
      let resY = value.pointY > smallY ? (value.pointY < bigY ? 'true' : 'false') : 'false'
      if (resX == 'true' && resY == 'true') {
        this.data.list.splice(index, 1)
      }
    })
  },
  // 自动开始
  gameStart() {
    this.setCount()
    this.data.startTime = setTimeout(() => {
      let temp = Math.round(Math.random() * (this.data.list.length - 1));
      this.setData({
        select: 0,
        gameState: true,
        resFail: temp
      })
      // 开始运行游戏的方法下面会写如何实现
      this.gameRun()
    }, 4000)
  },
  // 倒计时动画控制
  setCount() {
    if (this.data.count == 0) {
      return
    }
    this.data.countTime = setTimeout(() => {
      let tem = this.data.count - 1;
      this.setData({ count: tem })
      this.setCount()
    }, 1000)
  },
  // 结束
  gameEnd() {
    let newList = []
    newList.push(this.data.list[this.data.select])
    this.setData({
      select: 0,
      list: newList,
      showStart: true,
      mask: false,
      begin:false
    })

  },
  // 重置状态
  refresh() {
    this.setData({
      list: [],
      length:0,
      select: '',
      speed: 1,
      gameState: false,
      showStart: false
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})